import yaml
import requests
import os
class Base_api:
    
    def pretty_print_response(self,res):
        print(
            '{}\nHTTP/1.1 {}\n{}\n\n{}'.format(
            '\n\n----------- 得到响应 -----------',
            res.status_code,
            '\n'.join('{}: {}'.format(k, v) for k, v in res.headers.items()),
            res.text,
        ))
    
    def get_address(self,address,path):
        return os.path.join(address,path)
    
    #这里是测试步骤驱动的代码：
        # 第一步：写一个读取配置文件，然后加载为内容的方法
    
    def load_api(self,path):
        with open(path) as f:
            #safe_load 方法返回的是一个字典,类似于下面这种
            """
            {'app': 
                {'name': 'My Awesome App', 
                'version': '1.5.0',
                'debug': False, 
                'database': {'driver': 'postgresql', 'host': 'db.example.com'}
                }
            }    
            """
            return yaml.safe_load(f)


        # 第二步：把内容组装为符合要求的，所有的用例都用这个函数统一发送出去
    def send_api(self,para:dict):
        print(f'在send_api里面打印了{para}')


        # 这里有一个问题,yaml文件是写死的，但是对于用例来说，大体的步骤是写死的，但是步骤里面的数据可能需要动态传入，所以就需要替换。
        res = requests.request(**para
            # method=para['method'],
            # url = para['url'],
            # data= para['data']
            # params=para['params'],
            # json=para['json'],
            # headers=para['headers'],
            # cookies=para['cookies']
        )
        return res
    
    # 这里是测试用例数据驱动
    def steps_run(self,steps:list):
        #解析每一步，然后调用相应的api类
        for step in steps:
            method = step['method'].split('.')[-1]
            getattr(self,method)()